package util

import (
	/*
		"encoding/json"
		"github.com/astaxie/beego"
		//redis缓存引擎
		_ "github.com/astaxie/beego/cache/redis"
		//引入缓存模块
		"github.com/astaxie/beego/cache"
		"os"
	*/

	"encoding/json"
	// 替换 1.x 的 beego 为 2.x
	beego "github.com/beego/beego/v2/server/web"
	// 替换 1.x 的缓存包为 2.x
	"github.com/beego/beego/v2/client/cache"
	// 替换 1.x 的 Redis 缓存驱动为 2.x
	_ "github.com/beego/beego/v2/client/cache/redis"
	"github.com/beego/beego/v2/core/logs" // 新增：Beego 2.x 日志包
	"os"
)

const PAGELIMIT = 20

/**
 * 获取redis连接实例
 */
func GetRedis() (adapter cache.Cache, err error) {

	/*
		redisKey := beego.AppConfig.String("rediskey")
		redisAddr := beego.AppConfig.String("redisaddr")
		redisPort := beego.AppConfig.String("redisport")
		redisdbNum := beego.AppConfig.String("redisdbnum")
	*/
	// 读取 rediskey（处理两个返回值）
	redisKey, err := beego.AppConfig.String("rediskey")
	if err != nil {
		return nil, err // 或记录错误日志
	}

	// 读取 redisaddr
	redisAddr, err := beego.AppConfig.String("redisaddr")
	if err != nil {
		return nil, err
	}

	// 读取 redisport
	redisPort, err := beego.AppConfig.String("redisport")
	if err != nil {
		return nil, err
	}

	// 读取 redisdbnum
	redisdbNum, err := beego.AppConfig.String("redisdbnum")
	if err != nil {
		return nil, err
	}

	redis_config_map := map[string]string{
		"key":   redisKey,
		"conn":  redisAddr + ":" + redisPort,
		"dbNum": redisdbNum,
	}
	redis_config, _ := json.Marshal(redis_config_map)

	cache_conn, err := cache.NewCache("redis", string(redis_config))
	if err != nil {
		return nil, err
	}
	return cache_conn, nil
}

/**
 * 判断当前path是否存在的工具方法
 */
func IsExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

/**
 *json格式数据转换为实体对象
 */
func JsonToEntity(data []byte, object interface{}) error {
	if len(data) <= 0 {
		return nil
	}
	return json.Unmarshal(data, object)
}

// 向Map中存放数据
func PutParamToMap(mapp map[string]interface{}, key string, value interface{}) map[string]interface{} {
	mapp[key] = value
	return mapp
}

/**
 * 根据开发模式进行判断是否输出日志
 */
func LogInfo(v ...interface{}) {

	// 读取 runmode 时处理两个返回值
	runMode, err := beego.AppConfig.String("runmode")
	if err != nil {
		return // 或处理错误
	}
	if runMode == "dev" {
		logs.Info(v)
	}
}

/**
 * 错误
 */
func LogError(v ...interface{}) {
	runMode, err := beego.AppConfig.String("runmode")
	if err != nil {
		return
	}
	if runMode == "dev" {
		logs.Error(v)
	}
}

func LogWarn(v ...interface{}) {
	runMode, err := beego.AppConfig.String("runmode")
	if err != nil {
		return
	}
	if runMode == "dev" {
		logs.Warn(v)
	}
}

func LogDebug(v ...interface{}) {
	runMode, err := beego.AppConfig.String("runmode")
	if err != nil {
		return
	}
	if runMode == "dev" {
		logs.Debug(v)
	}
}

func LogNotice(v ...interface{}) {
	runMode, err := beego.AppConfig.String("runmode")
	if err != nil {
		return
	}
	if runMode == "dev" {
		logs.Notice(v)
	}
}
